package com.nuo.quartz.api;

import com.nuo.common.core.page.PageResult;
import com.nuo.common.core.result.Result;
import com.nuo.quartz.beans.pojo.request.QuartzJobAddReqDTO;
import com.nuo.quartz.beans.pojo.request.QuartzJobPageQueryReqDTO;
import com.nuo.quartz.beans.pojo.request.QuartzJobUpdateReqDTO;
import com.nuo.quartz.beans.pojo.request.QuartzLogPageQueryReqDTO;
import com.nuo.quartz.beans.pojo.response.QuartzJobRespDTO;
import com.nuo.quartz.beans.pojo.response.QuartzLogRespDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 定时任务Feign接口
 *
 * @author LGC
 */
@FeignClient("nuo-quartz")
public interface QuartzFeign {

    /**
     * 任务查询
     *
     * @param id 任务ID
     * @return Object
     */
    @GetMapping("/quartz/job/{id}")
    Result<QuartzJobRespDTO> getById(@PathVariable("id") Integer id);

    /**
     * 任务分页查询
     *
     * @param dto 任务分页查询
     * @return Object
     */
    @PostMapping("/quartz/job/pageList")
    Result<PageResult<QuartzJobRespDTO>> jobPage(@RequestBody QuartzJobPageQueryReqDTO dto);

    /**
     * 新增任务
     *
     * @param dto 新增任务
     * @return Object
     */
    @PostMapping("/quartz/job")
    Result<Integer> add(@RequestBody QuartzJobAddReqDTO dto);

    /**
     * 更新任务
     *
     * @param dto 更新任务
     * @return Object
     */
    @PutMapping("/quartz/job")
    Result<Integer> update(@RequestBody QuartzJobUpdateReqDTO dto);

    /**
     * 暂停任务
     *
     * @param id 任务ID
     * @return Object
     */
    @PutMapping("/quartz/job/pause/{id}")
    Result<Void> pause(@PathVariable("id") Integer id);

    /**
     * 恢复任务
     *
     * @param id 任务ID
     * @return Object
     */
    @PutMapping("/quartz/job/resume/{id}")
    Result<Void> resume(@PathVariable("id") Integer id);

    /**
     * 执行一次任务
     *
     * @param id 任务ID
     * @return Object
     */
    @GetMapping("/quartz/job/runOnce/{id}")
    Result<Void> runOnce(@PathVariable("id") Integer id);

    /**
     * 任务日志分页查询
     *
     * @param dto 任务日志分页查询
     * @return Object
     */
    @PostMapping("/quartz/job/jobLogPage")
    Result<PageResult<QuartzLogRespDTO>> jobLogPage(@RequestBody QuartzLogPageQueryReqDTO dto);
}
